package br.ufg.inf.sd.truco;


import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * @author Pedro Henrique de M. Rodrigues
 * @version 1.0
 */

public interface JogadorInterface extends Remote {

   /**
    * Trava as funcionalidades do jogador
    */
    public void travar() throws RemoteException;
    
   /**
    * Libera as funcionalidades do jogador
    */
    public void destravar() throws RemoteException;

   /**
    * Exibe que a partida esta trucada
    */
    public void setTruco() throws RemoteException;
    
   /**
    * Atualiza os pontos da partida
    * @param dupla identificador da dupla
    * @param pts pontos da dupla
    */
    public void setPontos(int dupla, int pts) throws RemoteException;
    
   /**
    * Este método atualiza a pontuacao parcial de uma rodada.
    * Ele é usado para indicar qual das jogadas de uma rodada uma determinada dupla ganhou.
    * @param jogada identifica qual das rodadas será setada como vencida por uma duplas ou outra.
    * @param seGanhou indica se a dupla ganhou a jogada (no caso preenchido com o valor true) ou não (preenchido com o valor false). 
    */
    public void setPontosParciais(int jogada, boolean seGanhou);
    
    
    /**
     * A carta que o jogador atual jogou
     * 
     * @param jogador Jogador atual
     * @param carta   Carta que o jogador jogou
     * @throws RemoteException
     */
    public void setCartaJogada(int jogador, Carta carta) throws RemoteException;;
    
    /**
     * Reinicia as cartas jogadas (inicia uma nova rodada)
     * 
     * @throws RemoteException
     */ 
    public void resetCartasJogadas() throws RemoteException;;
    
    /**
     * Metodo utilizado para receber as cartas do servidor
     * para cada jogador.
     * 
     * @param receber
     * @throws RemoteException
     */
    public void setCartas(Carta[] receber) throws RemoteException;
    
    
    /**
     * Metodo utilizado para alertar a um cliente o valor 
     * dos pontos da rodada em que ele se encontra
     * 
     * @param valor quantidade de pontos que a rodada esta valendo
     * @throws RemoteException
     */
    public void alertaJogadores(int valor) throws RemoteException;
    
    /**
     * Este método finalizará o cliente devido a uma solicitação do servidor.
     * Isto ocorrerá quando algum jogador resolver sair do jogo.
     * @param id identificação do jogador que solicitou sair do jogo
     */
    public void quit(int id);

}

